﻿using SmartRS.com.vn.smartrs.domain;
using SmartRS.com.vn.smartrs.service;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SmartRS.com.vn.smartrs.form.menu
{
    public partial class frmAddMenu : Form
    {
        IList<FoodKind> listFoodKind = new List<FoodKind>();
        IList<FoodUnit> listFoodUnit = new List<FoodUnit>();
        #region delegage
        public delegate void GetFood(Food food);
        public event GetFood getFood;
        public delegate void SendFood(Food food);
        public SendFood sendFood;
        #endregion delegage
        private Food f = null;
        public frmAddMenu()
        {
            InitializeComponent();
            sendFood = new SendFood(setFood);
        }

        private void setFood(Food food)
        {
            if (food != null)
            {
                f = food;
            }
            else
            {
                f = new Food();
            }
        }
        private void frmAddMenu_Load(object sender, EventArgs e)
        {
            //Fill data combobox
            fillData();
            //Set data
            if(null != f)
            {
                txtTenThucDon.Text = f.foodName;
                txtDonGia.Text = f.price.ToString();
                if (null != f.foodKind)
                {
                    foreach (FoodKind row in cbbDanhMuc.Items)
                    {
                        if (row.foodKindId == f.foodKind.foodKindId) cbbDanhMuc.SelectedItem = row;
                    }
                }
                else
                {
                    cbbDanhMuc.SelectedItem = null;
                }
                if (null != f.foodUnit)
                {
                    foreach (FoodUnit row in cbbDonViTinh.Items)
                    {
                        if (row.foodUnitId == f.foodUnit.foodUnitId) cbbDonViTinh.SelectedItem = row;
                    }
                }
                else
                {
                    cbbDonViTinh.SelectedItem = null;
                }
                //Discount
                txtGiaGiam.Text = f.discountValue.ToString();
            }
        }
        private void btnHuy_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnHoanTat_Click(object sender, EventArgs e)
        {
            epMenu.Clear();
            long donGia = 0;
            long giaGiam = 0;
            string error = "";
            if (txtTenThucDon.Text.Trim().Equals(""))
            {
                error += "Tên thực đơn không được để trống! \r\n";
                epMenu.SetError(this.txtTenThucDon, "Tên thực đơn không được để trống!");
            }
            if (txtDonGia.Text.Trim().Equals(""))
            {
                error += "Đơn giá không được để trống! \r\n";
                epMenu.SetError(this.txtDonGia, "Đơn giá không được để trống!");
            }
            else
            {
                try
                {
                    donGia = Int32.Parse(txtDonGia.Text.Trim());
                    if (donGia == 0)
                    {
                        error += "Đơn giá phải lớn hơn 0! \r\n";
                        epMenu.SetError(this.txtDonGia, "Đơn giá phải lớn hơn 0!");
                    }
                }
                catch(Exception ex)
                {
                    error += "Đơn giá phải là số! \r\n";
                    epMenu.SetError(this.txtDonGia, "Đơn giá phải là số!");
                }
            }
            if(!txtGiaGiam.Text.Trim().Equals(""))
            {
                try
                {
                    giaGiam = Int32.Parse(txtGiaGiam.Text.Trim());
                }
                catch (Exception ex)
                {
                    error += "Giá giảm phải là số! \r\n";
                    epMenu.SetError(this.txtDonGia, "Giá giảm phải là số!");
                }
            }
            if (giaGiam > 0 && giaGiam >= donGia)
            {
                error += "Giá giảm phải nhỏ hơn đơn giá! \r\n";
                epMenu.SetError(this.txtGiaGiam, "Giá giảm phải nhỏ hơn đơn giá!");
            }
            if (cbbDanhMuc.SelectedIndex == -1)
            {
                error += "Danh mục không tồn tại! \r\n";
                epMenu.SetError(this.cbbDanhMuc, "Danh mục không tồn tại!");
            }
            if (cbbDonViTinh.SelectedIndex == -1)
            {
                error += "Đơn vị tính không tồn tại! \r\n";
                epMenu.SetError(this.cbbDonViTinh, "Đơn vị tính không tồn tại!");
            }
            if (!error.Equals(""))
            {
                MessageBox.Show(this, error, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (null == f)
            {
                
                f = new Food 
                {
                    foodKind = FoodKindService.getInstance().getById((long)cbbDanhMuc.SelectedValue),
                    foodName = txtTenThucDon.Text.Trim(),
                    price = donGia,
                    discountValue = giaGiam
                };
                f.foodUnit = cbbDonViTinh.SelectedIndex != -1 ? FoodUnitService.getInstance().getById((long)cbbDonViTinh.SelectedValue) : null ;
            }
            else
            {
                f.foodName = txtTenThucDon.Text.Trim();
                f.price = donGia;
                f.foodKind = FoodKindService.getInstance().getById((long)cbbDanhMuc.SelectedValue);
                f.foodUnit = cbbDonViTinh.SelectedIndex != -1 ? FoodUnitService.getInstance().getById((long)cbbDonViTinh.SelectedValue): null;
                f.discountValue = giaGiam;
            }
            if (getFood != null)
            {
                getFood(f);
                this.Close();
            }
            else
            {
                this.Close();
            }
        }
        private void loadData()
        {
            try
            {
                listFoodKind = FoodKindService.getInstance().getAll();
                listFoodUnit = FoodUnitService.getInstance().getAll();
            }
            catch(Exception ex)
            {
                throw new Exception("Lỗi trong quá trình load dữ liệu danh mục và đơn vị tính: " + ex.Message);
            }
        }

        private void fillData()
        {
            try
            {
                loadData();
                cbbDanhMuc.DataSource = listFoodKind;
                cbbDanhMuc.DisplayMember = "foodKindName";
                cbbDanhMuc.ValueMember = "foodKindId";
                cbbDanhMuc.AutoCompleteSource = AutoCompleteSource.ListItems;

                cbbDonViTinh.DataSource = listFoodUnit;
                cbbDonViTinh.DisplayMember = "foodUnitName";
                cbbDonViTinh.ValueMember = "foodUnitId";
                cbbDonViTinh.AutoCompleteSource = AutoCompleteSource.ListItems;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void txtDonGia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtGiaGiam_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }
    }
}
